"""
    答疑：
    1. 函数参数星号作用？
    2. 列表元素读取和修改的区别？
"""

# 位置形参p1:实参必须提供
# 星号元组形参args:多个实参合并为元组
# def func01(p1,*args): # *的核心思想是合
#     print(p1) # 10
#     print(args) # 20,30,40
#
# def func02(p1,p2,p3):
#     print(p1)
#     print(p2)
#     print(p3)
#
# func01(10,20,30,40)
#
# list01 = [10,20,30]
# func02(*list01) # *核心思想：拆传递列表的元素
#
# # 修改列表元素：定位代码在赋值号左边
# list01[0] = 50
# # 读取列表元素：定位代码在赋值号右边
# b = list01[0]
# print(b)
# # 切片读取元素，会触发浅拷贝
# list001 = list01[:]
# # in的本质会遍历右侧切片数据，所以也会触发浅拷贝
# print(10 in list01[:3])

"""
    复习 - 函数参数
    形式参数：限制实参提供数据的方式
        位置形参：实参必填
            def 函数名(名称1,名称2)：
        默认形参：实参可选
            def 函数名（名称1=数据,名称2=数据）
        星号元组形参：多位置实参合一元组
            def 函数名(*args)
        双星号字典形参：多关键字实参合一字典
            def 函数名(**kwargs)
        命名关键字形参：实参必须是关键字实参
            def 函数名(*args,名称)
            def 函数名(*,名称)
    
    实际参数：与形参如何对应
        位置实参：按顺序与形参进行对应
            函数名(数据1，数据2)
        序列实参：一序列拆多元素，按顺序对应
            函数名(*序列)  # 序列：字符串、列表、元组
        关键字形参：按名称与形参进行对应
            函数名(名称1=数据,名称2=数据)
        字典实参：一字典拆多元素，按名字对应
            函数名(**字典)
"""

# 默认形参：实参可以不给
# def func01(a = 1):
#     pass
#
# func01()
# func01(2)
#
# def fun02(a=1,b=2):
#     pass
# 关键字实参：根据名称对应（要跳过形参a）
# fun02(b=20)
#
# def fun03(*,a):
#     pass
# fun03(a=10)
def func01(list_target):
    print(list_target)

def fun02(*args): #合并为元组
    print(args)

def fun03(*args,**kwargs):
    print(args)
    print(kwargs)

def fun04(p1,p2,*,p4,**kwargs):
    print(p1)
    print(p2)
    print(p4)
    print(kwargs)

func01([1,2,3])
fun02(*[1,2,3])
fun03(1,2,3,a=2,b=5,c=6)
fun04(10,20,p4=30,p5=50)
